home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_12_09 / single2 / farheapb.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-07  |  2.2 KB  |  84 lines

  1. //  Listing 3
  2. //  farheapb.h 
  3. //
  4. //  Copyright Singleton Systems Ltd 1994 
  5.  
  6. #if !defined (_FARHEAPB_H_)
  7. #define _FARHEAPB_H_     
  8.  
  9. #define     FP_FHB FarHeapBlock FAR *  
  10. #define BASED_VOID __based (void)
  11.  
  12. typedef HGLOBAL FHB_POSITION;
  13.  
  14. class CMemoryObject;
  15.  
  16. class FAR FarHeapBlock
  17. friend class MemoryObject; 
  18. private:
  19. HGLOBAL my_hglobal, previous_hglobal, next_hglobal; 
  20. DWORD fhb_block_size;
  21.  
  22. static HGLOBAL first_fhb,   //  HGLOBAL for the first
  23.                             //  FarHeapBlock
  24.                last_fhb;    //  HGLOBAL for the last
  25.                             //  FarHeapBlock
  26.  
  27. enum {default_size = 4096};
  28. MemoryObject BASED_VOID * free_list,
  29.                             //  Start of free list of 
  30.                             //  MemoryObjects
  31.              BASED_VOID * end_free_list, 
  32.                             //  Last MemoryObject in 
  33.                             //  the free list.
  34.              BASED_VOID * in_use_list,
  35.                             //  First allocated 
  36.                             //  MemoryObject  
  37.              BASED_VOID * end_in_use_list;
  38.                             //  Last allocated 
  39.                             //  MemoryObject  
  40.  
  41. //    Functions
  42. public:
  43. void FAR * operator new (size_t size);
  44. void operator delete (void FAR * p_fhb); 
  45. FarHeapBlock ();
  46. #if defined (_DEBUG)
  47.     ~FarHeapBlock ()
  48.         {ASSERT (in_use_list == NULL 
  49.                  && end_in_use_list == NULL);}
  50. #endif
  51.  
  52. DWORD FarHeapBlock::Size () const
  53. {
  54. ASSERT (AfxIsValidAddress 
  55.                     (this, sizeof (FarHeapBlock)));
  56. return fhb_block_size;
  57. }
  58.  
  59. static DWORD DefaultSize ()
  60.     {return default_size;}
  61.     
  62. static int GetCount ();
  63.     //  Returns the number of FarHeapBlocks currently 
  64.     //  in use
  65.     
  66. static FP_FHB GetHbFromHandle (HGLOBAL h);
  67.     //  Returns a far pointer to a FarHeapBlock, 
  68.     //  given its handle 
  69.  
  70. //    Access operations
  71. static FHB_POSITION GetHeadPosition ()
  72.     {return first_fhb;}
  73.  
  74. static FP_FHB GetAt (FHB_POSITION p)
  75.     {return GetHbFromHandle (p);} 
  76.  
  77. static FP_FHB GetNext (FHB_POSITION & p);
  78.  
  79. static BOOL IsEmpty ()
  80.     {return FarHeapBlock::first_fhb == NULL;}
  81. };
  82. #endif
  83.